package com.swan.test.freemarker.enums;

import java.util.Arrays;

public enum WhetherEnum {

    /** N: 是 */
    NO(false, "N"),

    /** Y: 否 */
    YES(true, "Y"),

    ;

    // 编码
    private Boolean value;

    // 描述
    private String desc;

    WhetherEnum(Boolean value, String desc) {
        this.value = value;
        this.desc = desc;
    }


    /** 获取枚举值 */
    public Boolean value(){
        return this.value;
    }

    /** 获取枚举描述 */
    public String desc(){
        return this.desc;
    }

    /** 获取 value 对应的枚举类型
     * @param value 枚举值
     * @return 不存在时返回 null
     */
    public static WhetherEnum ofvalue(Boolean value) {
        return Arrays.stream(WhetherEnum.values())
                .filter(item -> item.value.equals(value))
                .findAny()
                .orElse(null);
    }

    /** 获取 desc 对应的枚举类型
     * @param desc 描述
     * @return 不存在时返回 null
     */
    public static WhetherEnum ofDesc(String desc) {
        return Arrays.stream(WhetherEnum.values())
                .filter(item -> item.value.equals(desc))
                .findAny()
                .orElse(null);
    }

    /** 根据 desc 对应的 value
     * @param desc 描述
     * @param defaultvalue 默认值
     * @return 不存在时返回默认值
     */
    public static Boolean getvalue(String desc, Boolean... defaultvalue) {
        WhetherEnum whetherEnum = ofDesc(desc);
        return whetherEnum != null ?  whetherEnum.value() : defaultvalue.length > 0 ? defaultvalue[0] : null;
    }

    /** 根据 value 对应的 desc
     * @param value 编码
     * @param defaultDesc 默认值
     * @return 不存在时返回默认值
     */
    public static String getDesc(Boolean value, String... defaultDesc) {
        WhetherEnum whetherEnum = ofvalue(value);
        return whetherEnum != null ?  whetherEnum.desc() : defaultDesc.length > 0 ? defaultDesc[0] : null;
    }

}

